/**
 * axios 实例
 */
import axios from "axios";
import type {
  AxiosResponse,
  AxiosInstance,
  InternalAxiosRequestConfig,
  AxiosError,
} from "axios";
import router from "@/router";
import config from "@/config";
// import qs from "qs";

const request: AxiosInstance = axios.create({
  // baseURL: config.baseURL,
  timeout: config.TIME_OUT,
});

/**
 * 添加请求拦截器
 */
request.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 添加 token 到 header
    //   const token = getToken();
    //   if (token && config.headers) {
    //     config.headers.common[TOKEN_HEADER_NAME] = token;
    //   }
    //   if (config.method === 'get') {
    //     // 如果是get请求，且params是数组类型如arr=[1,2]，则转换成arr=1&arr=2
    //     config.paramsSerializer = function (params) {
    //       return qs.stringify(params);
    //     };
    //   }
    return config;
  },
  (error: AxiosError) => {
    return Promise.reject(error);
  }
);

/**
 * 处理错误响应
 */
const processErrorResponse = (error: AxiosError) => {
  let message: string = "";
  let status = error.response?.status;
  switch (status) {
    case 401:
      message = "token失效";
      break;
    case 403:
      message = "拒绝访问";
      break;
    case 404:
      message = "请求地址错误";
      break;
    case 500:
      message = "服务器故障";
      break;
    default:
      message = "网络连接故障";
  }
  console.log(message);
  return Promise.reject(error);
};

/**
 * 添加响应拦截器
 */
request.interceptors.response.use(
  (res: AxiosResponse) => {
    // 请求成功，token自动续期
    //   if (res.config.responseType === 'blob' || res.data?.code === '00000') {
    //     const token = res.headers[TOKEN_HEADER_NAME.toLowerCase()];
    //     if (token) {
    //       setToken(token);
    //     }
    //     return res;
    //   }
    return res.data;
    // 处理响应错误，请求异常自动提示错误信息，如果是B0301就跳转到登录界面
    // return processErrorResponse(res);
  },
  (error: AxiosError) => {
    // 处理响应错误
    return processErrorResponse(error);
  }
);

export default request;
